package com.sprouting.personal.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sprouting.personal.dao.PsPlanDao;
import com.sprouting.personal.dao.PsPlanHistoryDao;
import com.sprouting.personal.model.entity.PsPlan;
import com.sprouting.personal.model.entity.PsPlanHistory;
import com.sprouting.personal.model.vo.PsPlanVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.List;

/**
 * 任务计划
 *
 * @author ：LX（长沙麓谷）
 * @date 创建时间： 2023/1/12 17:59
 */
@Service
@Slf4j
public class PsPlanService extends ServiceImpl<PsPlanDao, PsPlan> {

    @Resource
    private PsPlanDao psPlanDao;
    @Resource
    private PsPlanHistoryDao psPlanHistoryDao;

    /**
     * 根据主键查询计划
     * @param id 主键
     * @return
     */
    public PsPlan getPlanById(String id) {
        return psPlanDao.getPlanById(id);
    }

    /**
     * 获取用户全部的任务计划
     * @param userId 用户ID
     * @param taskFinishList 要查询的完成类型
     * @return
     */
    public List<PsPlan> getPlanByUserId(String userId, List<Integer> taskFinishList) {
        return psPlanDao.getPlanByUserId(userId, taskFinishList);
    }

    /**
     * 根据计划ID删除计划以及执行历史记录
     * @param id 计划ID
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    public void delPlan(String id) {
        psPlanDao.deleteById(id);
        LambdaQueryWrapper<PsPlanHistory> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(PsPlanHistory::getPlanId, id);
        psPlanHistoryDao.delete(wrapper);
    }

    /**
     * 分页查询全部的计划
     * @param page 分页参数
     * @param plan 计划参数
     * @param userId 当前登录用户ID
     * @return
     */
    public Page<PsPlanVo> getTaskAll(Page page, PsPlan plan, String userId) {
        return psPlanDao.getTaskAll(page, plan, userId);
    }

    /**
     * 更新计划，添加记录
     * @param plan 计划
     * @param psPlanHistory 执行记录
     */
    public void updatePlanAndHistory(PsPlan plan, PsPlanHistory psPlanHistory) {
        psPlanDao.updateById(plan);
        psPlanHistoryDao.insert(psPlanHistory);
    }

    /**
     * 获取小时级别的任务-固定任务到秒级别的
     * @param userId 当前登录用户ID
     * @return
     */
    public List<PsPlan> getHourTask(String userId) {
        return psPlanDao.getHourTask(userId);
    }

    /**
     * 获取全部的任务总数,所有的任务
     * @param userId 当前用户ID
     * @return
     */
    public Long getPlanTool(String userId) {
        return psPlanDao.getPlanTool(userId);
    }
}
